// 采用 class 关键字来定义"类"

class Panda {
    // 定义静态属性 (被 static 修饰符所修饰)
    static school = '大熊猫学院';
    // 定义实例属性
    name;
    // 定义构造函数
    constructor( name ) {
        console.log( this.name );
        // 用构造函数的参数来初始化实例属性
        this.name = name ;
        console.log( this.name );
    }
    // 定义实例方法(这些方法被定义在原型上但默认是不可枚举的)
    introduce(){
        console.log( `大家好，我是${this.name}` );
    }
    // 定义静态方法(这些方法被定义在类中但默认不可枚举)
    static show(){
        console.log( Panda.school );
    }
}

console.log( Panda );
console.log( Object.getOwnPropertyDescriptor( Panda , 'show' ) );

console.log( '- '.repeat(10) );

let p = new Panda( '小美' );
console.log( p );

p.introduce(); // 调用从原型链上继承的方法

console.log( p.hasOwnProperty( 'name' ) );
console.log( p.hasOwnProperty( 'introduce' ) );

console.log( Panda.prototype );
console.log( Panda.prototype.hasOwnProperty( 'introduce' ) );
console.log( Object.getOwnPropertyDescriptor( Panda.prototype , 'introduce' ) );